import { defineConfig, loadEnv } from "vite";
import { handleEnv } from "./build/utils/helper";
import { createProxy } from "./build/vite/proxy";
import { createVitePlugins } from "./build/plugins";
import { buildOptions } from "./build/vite/build";
import postcsspxtoviewport8plugin from "postcss-px-to-viewport-8-plugin";
import postcssWriteSvg from "postcss-write-svg";
import unocssPostcss from "@unocss/postcss";
import autoprefixer from "autoprefixer";
// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
	const root = process.cwd();
	const env = loadEnv(mode, root);
	const viteEnv = handleEnv(env);
	const { VITE_PROXY } = env;

	return {
		plugins: createVitePlugins(),
		resolve: {
			alias: {
				"@": "/src"
			}
		},
		css: {
			preprocessorOptions: {
				scss: {
					javascriptEnabled: true,
					charset: false,
					additionalData: `@use "@/styles/index.scss" as *;`
				}
			},
			postcss: {
				plugins: [
					unocssPostcss({}),
					autoprefixer({}),
					postcssWriteSvg({ utf8: false }),
					postcsspxtoviewport8plugin({
						unitToConvert: "px", // 需要转换的单位，默认为"px"
						viewportWidth: 1440, // 设计稿的视窗宽度
						unitPrecision: 5, // 单位转换后保留的精度
						propList: [
							"width",
							"left",
							"right",
							"margin-right",
							"margin-left",
							"padding-left",
							"padding-right"
						], // 能转化为 vw 的属性列表
						viewportUnit: "vw", // 希望使用的视窗单位
						fontViewportUnit: "vh", // 字体使用的视窗单位
						selectorBlackList: ["ignore-"], // 需要忽略的 CSS 选择器，不会转为视窗单位，使用原有的 px 等单位
						minPixelValue: 1, // 设置最小的转换数值，如果为 1 的话，只有大于 1 的值会被转换
						mediaQuery: false, // 媒体查询里的单位是否需要转换单位
						replace: true, // 是否直接更换属性值，而不添加备用属性
						exclude: [/\/ReportDownload\//], // 忽略某些文件夹下的文件或特定文件，例如 'node_modules' 下的文件
						include: /\/src\//, // 如果设置了include，那将只有匹配到的文件才会被转换
						landscape: false, // 是否添加根据 landscapeWidth 生成的媒体查询条件
						landscapeUnit: "vw", // 横屏时使用的单位
						landscapeWidth: 1440 // 横屏时使用的视窗宽度
					}),
				]
			}
		},
		server: {
			headers: {
				"Access-Control-Allow-Origin": "*"
			},
			open: true,
			cors: true,
			port: Number(VITE_PROXY),
			host: "0.0.0.0",
			hmr: true,
			// watch: {
			// 	usePolling: true // 修复HMR热更新失效
			// },
			// 跨域处理
			// proxy: createProxy(VITE_PROXY)
			proxy: {
				"/api": {
					headers: {
						"Access-Control-Allow-Origin": "*"
					},
					// 改为测试环境
					target: "http://xxx:8000/api",
					changeOrigin: true,
					logLevel: "debug",
					rewrite: path => path.replace(/^\/api/, "")
				}
			}
		},
		build: buildOptions()
	};
});
